"""
一、定义一个学生Student类。有下面的类属性：
1 姓名 name
2 年龄 age
3 成绩 score（语文，数学，英语) [每课成绩的类型为整数]
类方法：
 1 获取学生的姓名：get_name() 返回类型:str
2 获取学生的年龄：get_age() 返回类型:int
3 返回3门科目中最高的分数。get_course() 返回类型:int
4 将每个实例学生对象写进txt文件里，要持久保存
举例：{"姓名":"a","年龄":29,"成绩":{"语文":99,"数学":100,"英语":85}
5 获取所有学生的信息
写好类以后，可以定义2个同学测试下:
zm = Student('zhangming',20,[69,88,100])
"""
import json
class Student():
    def __init__(self,name:str,age:int,score):
        self.name=name
        self.age=age
        self.score=score
    def get_name(self):
        return self.name
    def get_age(self):
        return self.age
    def get_course(self):
        return max(self.score)
    def to_dict(self):
        return {"姓名":self.name,"年龄":self.age,"成绩": {"语文": self.score[0], "数学": self.score[1], "英语": self.score[2]}}
    @classmethod
    def save(cls,student,filename="students.txt"):
        with open(filename,"a",encoding="utf-8") as f:
            json.dump(student.to_dict(),f,ensure_ascii=False)
            f.write("\n")

    @classmethod
    def load(cls,filename="students.txt"):
        students=[]
        with open(filename,"r",encoding="utf-8") as f:
            for line in f:
                students.append(json.loads(line.strip()))
        return students

zm = Student('zhangming', 20, [69, 88, 100])
zm1 = Student('zhangming1',20,[69,88,100])


Student.save(zm)
Student.save(zm1)

for i in Student.load():
    print(i)


"""
二、定义一个字典类：dictclass。完成下面的功能：
1 删除某个key
2 判断某个键是否在字典里，如果在返回键对应的值，不存在则返回"not found"
3 返回键组成的列表：返回类型;(list)
4 合并字典，并且返回合并后字典的values组成的列表。返回类型:(list)\

"""

class dictclass:
    def __init__(self,dict):
        self.dict=dict

    def del_key(self,key):
        del(self.dict[key])

    def get_value(self,key):
        if key in self.dict:
            return self.dict[key]
        else:
            return "not found"

    def get_keys(self):
        return [self.dict.keys()]

    def sum(self,other):
        sum = self.dict.copy()
        sum.update(other)
        return list(sum.values())

d = dictclass({"a":1,"b":2,"c":3,"d":4})
print(d.dict)
d.del_key("d")
print(d.dict)
print(d.get_value("d"))
print(d.get_keys())
c=d.sum({"f":6,"g":7})
print(c)


"""
三、定义一个列表的操作类：Listinfo
包括的方法:
1 列表元素添加: add_key(keyname) [keyname:字符串或者整数类型]
2 列表元素取值：get_key(num) [num:整数类型]
3 列表合并：update_list(list) [list:列表类型]
4 删除并且返回最后一个元素：del_key()
"""

class Listinfo:
    def __init__(self):
        self.list=[]

    def add_key(self,keyname:str or int):
        self.list.append(keyname)
    def get_keys(self,num):
        return self.list[num]
    def update_list(self,new_list):
        self.list.extend(new_list)
    def del_key(self,):
        self.list.pop()

new_list=Listinfo()
new_list.add_key("a")
new_list.add_key("b")
print(new_list.list)
print(new_list.get_keys(1))
new_list.update_list([1,2,3])
print(new_list.list)
new_list.del_key()
print(new_list.list)



"""
四、做一个学生点名系统，系统里支持：存入学生、更改学生、删除学生、点到学生姓名方法
存入学生（姓名、年龄、家庭地址、手机号）： 存入成功后，提示xxx存入成功
更改学生（姓名、年龄、家庭地址、手机号）：可以修改学生内容的任意一个字段
删除学生：删除的学生将不在展示
展示全部学生：可以看到全部的学生姓名
学生姓名：随机抽取任意一个存在的学生信息，然后打印：到！。举例： 刘闯到！
"""

# class Students:
#     def __init__(self,name,age,address,tel):
#         self.name=name
#         self.age=age
#         self.address=address
#         self.tel=tel
# class stu_System:
#     def __init__(self):
#         self.students=[]
#     def add_student(self,name,age,address,tel):
#
















